
############################################################################################
print('\n第31部分')
'''
模块
'''

"""
第三方的模块
flask Django    前后端web开发
pandas numpy    数据分析
pygame          做游戏
sklearn         机器学习

编写代码
一个函数    一个功能
一个类     一种类型的功能实现   登录、注册、访问
一个模块    一个板块的内容开发   用户模块
"""

import os.path as path
from datetime import datetime
"""
导入模块的两种方法
from 模块名 import 功能1，功能2
其中 from 模块名 import *    导入所有功能
import 模块.功能 as 新功能名
"""
print(path.join(path.dirname(__file__), '..'))
print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print('时间输出完毕\n')
"""
导入自定义模块的功能
"""
from python6_class import Cat

print('python6_class导入会自动执行全局作用域的执行命令')
print('当前文件执行为：')
cat = Cat('mimi', 5)
cat.say()


############################################################################################
print('\n第32部分')
'''
包
里面有多个自定义的模块
但是必须要有  __init__.py文件
'''

############################################################################################
print('\n第33部分')
'''
二分查找法
'''
def binary_search(array, value):
    left = 0
    right = len(array) - 1
    while left <= right:
        mid = (left + right)//2
        if array[mid] == value:  # 找到目标，返回下标mid
            return mid
        elif array[mid] < value:  # 中间值【小于】查找值，那么 left左指针 改成   mid中指针+1
            left = mid + 1
        elif array[mid] > value:  # 中间值【大于】查找值，那么 right右指针 改成   mid中指针-1
            right = mid - 1
    return None


############################################################################################
print('\n第34部分')
'''
单例模式
'''


# 类装饰器法
def single_test(cls):
    single_dict = {}

    def wrapper(*args, **kwargs):
        if cls not in single_dict:
            single_dict[cls] = cls(*args, **kwargs)
        return single_dict[cls]

    return wrapper


@single_test
class Person_Single:
    def __init__(self):
        pass


# 元类法
class Single2(type):
    _instance = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instance:
            cls._instance[cls] = super(Single2, cls).__call__(*args, **kwargs)
        return cls._instance[cls]


class Person_Single2(metaclass=Single2):
    def __init__(self):
        pass


# __new__方法
class Single3:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Single3, cls).__new__(cls)
        return cls._instance


############################################################################################
print('\n第35部分')
'''
list 实现原理：

dict 底层实现原理：把key通过哈希Hash表转换为整数值，用整数值决定存储位置，
        哈希冲突：不同的key的哈希Hash值相同，这时python会自动寻找下一个空位置

python代码如何优化    把列表list遍历换成字典dict，哈希查询比列表list快
                    可以用迭代器和生成器，节省内存空间
                    使用并行处理，将任务分批执行，多线程或多进程看需求
                    使用更高效的算法和数据结构
                    避免重复计算
                    

'''
